package br.com.datasun.biblioteca.ui;

import images.ImageLoader;

import java.awt.AWTKeyStroke;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.KeyboardFocusManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.HashSet;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.border.EmptyBorder;

import br.com.datasun.biblioteca.ui.controller.TelaBiblioteca;
import br.com.datasun.biblioteca.ui.controller.UIController;

public class MainUI extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	//Menu
	private JMenuBar menuPricipal = new JMenuBar(); 	
	private JMenu menuArquivo =  new JMenu("Arquivo");
	private JMenuItem menuArquivoSair = new JMenuItem("Sair");
	private JMenu menuCadastros = new JMenu("Cadastros");
	private JMenuItem menuCadastrosBibliotecas = new JMenuItem("Bibliotecas");
	private JMenuItem menuCadastrosAutores = new JMenuItem("Autores");
	private JMenuItem menuCadastrosCategorias = new JMenuItem("Categorias");
	private JMenuItem menuCadastrosAssuntos = new JMenuItem("Assuntos");	
	private JMenuItem menuCadastrosEditoras = new JMenuItem("Editoras");
	private JMenuItem menuCadastrosLivros = new JMenuItem("Livros");
	
	private JMenu menuConsultas = new JMenu("Consultas");
	private JMenuItem menuConsultasClientes = new JMenuItem("Clientes");
	private JMenuItem menuConsultasLivros = new JMenuItem("Livros");
	
	private JMenu menuRelatorios = new JMenu("Relatorios");
	
	private JMenu menuAjuda = new JMenu("Ajuda");
	private JMenuItem menuAjudaSobre = new JMenuItem("Sobre o sistema");
	
	
	
	//Barra de bot�es
	private final JToolBar toolBar = new JToolBar();
	private final JButton jbConsultaClientes = new JButton();
	private final JButton jbCadastroClientes = new JButton();
	private final JButton jbConsultaLivros = new JButton();
	private final JButton jbCadastroLivros = new JButton();
	private final JButton jbEmprestimos = new JButton();
	private final JButton jbDevolucoes = new JButton();
	
	private JPanel panelEmVisualizacao = new JPanel();
	
	//Contralodor de telas
	private UIController uiController;

	/**
	 * Launch the application.
	 */
	/*public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					
					MainUI frame = new MainUI();
					frame.setVisible(true);
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}*/

	/**
	 * Create the frame.
	 */
	public MainUI() {
		inicializar();
		uiController = UIController.getInstance(this);
		UIController.mudarTela(TelaBiblioteca.MENU_CENTRAL_UI);
		
		//UIController.mudarTela(TelaBiblioteca.CADASTRO_BIBLIOTECA_UI);
	}
	
	private void inicializar(){
		
		// Colocando enter para pular de campo  
        HashSet backup = new HashSet(this.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));  
        HashSet conj = (HashSet) backup.clone();  
        conj.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, 0));  
        this.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, conj);  
        
		setTitle("Sistema de Gest\u00E3o de Bibliotecas");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 685, 506);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		contentPane.add(panelEmVisualizacao,BorderLayout.CENTER);
		
		inicializarMenu();
		inicializarBarraFerramentas();
		
	}
	
	private void inicializarMenu(){
		setJMenuBar(menuPricipal);
		
		// Adicionar menus na barra de menu
		menuPricipal.add(menuArquivo);
		menuPricipal.add(menuCadastros);
		menuPricipal.add(menuConsultas);
		menuPricipal.add(menuRelatorios);
		menuPricipal.add(menuAjuda);
		menuArquivoSair.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});
		
		menuArquivo.add(menuArquivoSair);
		menuCadastrosAssuntos.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				uiController.mudarTela(TelaBiblioteca.CADASTRO_ASSUNTOS_UI);
			}
		});
		
		menuCadastros.add(menuCadastrosAssuntos);
		menuCadastrosAutores.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				uiController.mudarTela(TelaBiblioteca.CADASTRO_AUTORES_UI);
			}
		});
		menuCadastros.add(menuCadastrosAutores);
		menuCadastrosBibliotecas.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				uiController.mudarTela(TelaBiblioteca.CADASTRO_BIBLIOTECA_UI);
			}
		});
		
		menuCadastros.add(menuCadastrosBibliotecas);
		menuCadastrosCategorias.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				uiController.mudarTela(TelaBiblioteca.CADASTRO_CATEGORIA_UI);
			}
		});
		menuCadastros.add(menuCadastrosCategorias);
		menuCadastrosEditoras.addActionListener(new ActionListener() {			
			public void actionPerformed(ActionEvent arg0) {
				UIController.mudarTela(TelaBiblioteca.CADASTRO_EDITORAS_UI);
			}
		});
		
		menuCadastros.add(menuCadastrosLivros);
		menuCadastrosLivros.addActionListener(new ActionListener() {			
			public void actionPerformed(ActionEvent arg0) {
				UIController.mudarTela(TelaBiblioteca.CADASTRO_LIVROS_UI);
			}
		});
		menuCadastros.add(menuCadastrosEditoras);
				
		
		menuConsultas.add(menuConsultasClientes);
		menuConsultasLivros.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				UIController.mudarTela(TelaBiblioteca.CONSULTAR_LIVROS_UI);
			}
		});
		menuConsultas.add(menuConsultasLivros);
		
		menuConsultasClientes.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				ConsultaClientesUI consultaClientesUI = new ConsultaClientesUI();
				consultaClientesUI.setModal(true);
				consultaClientesUI.setLocationRelativeTo(instanciaMenu());
				consultaClientesUI.setVisible(true);
			}
		});
		menuConsultas.add(menuConsultasLivros);		
		
		menuAjudaSobre.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				SobreSistemaUI sobreSistema = new SobreSistemaUI();
				sobreSistema.setModal(true);
				sobreSistema.setLocationRelativeTo(instanciaMenu());
				sobreSistema.setVisible(true);
			}
		});
		
		menuAjuda.add(menuAjudaSobre);
		
	}
	
	private void inicializarBarraFerramentas(){
		contentPane.add(toolBar,BorderLayout.NORTH);
		
		Dimension tamanhoBotoes = new Dimension(50,50);		
		jbConsultaClientes.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ConsultaClientesUI consultaClientesUI = new ConsultaClientesUI();
				consultaClientesUI.setModal(true);
				consultaClientesUI.setLocationRelativeTo(instanciaMenu());
				consultaClientesUI.setVisible(true);
			}
		});
		toolBar.add(jbConsultaClientes);
		jbCadastroClientes.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				UIController.mudarTela(TelaBiblioteca.CADASTRO_CLIENTE_UI);
			}
		});
		toolBar.add(jbCadastroClientes);
		jbConsultaLivros.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				UIController.mudarTela(TelaBiblioteca.CONSULTAR_LIVROS_UI);
			}
		});
		toolBar.add(jbConsultaLivros);
		toolBar.add(jbCadastroLivros);
		jbEmprestimos.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				UIController.mudarTela(TelaBiblioteca.EMPRESTIMO_EXEMPLAR_UI);
			}
		});
		toolBar.add(jbEmprestimos);
		jbDevolucoes.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				DevolucaoExemplarUI devolucaoExemplarUI = new DevolucaoExemplarUI();
				devolucaoExemplarUI.setModal(true);
				devolucaoExemplarUI.setLocationRelativeTo(instanciaMenu());
				devolucaoExemplarUI.setVisible(true);
			}
		});
		toolBar.add(jbDevolucoes);
		
		jbConsultaClientes.setPreferredSize(tamanhoBotoes);
		jbCadastroClientes.setPreferredSize(tamanhoBotoes);
		jbConsultaLivros.setPreferredSize(tamanhoBotoes);
		jbCadastroLivros.setPreferredSize(tamanhoBotoes);
		jbEmprestimos.setPreferredSize(tamanhoBotoes);
		jbDevolucoes.setPreferredSize(tamanhoBotoes);
		
		jbConsultaClientes.setIcon(ImageLoader.createImageIcon("btnConsultarPessoas50x50.png"));
		jbCadastroClientes.setIcon(ImageLoader.createImageIcon("btnCadastrarPessoa50x45.png"));
		jbConsultaLivros.setIcon(ImageLoader.createImageIcon("btnPesquisarLivro50x50.png"));
		jbCadastroLivros.setIcon(ImageLoader.createImageIcon("btnCadastrarLivro50x50.png"));
		jbEmprestimos.setIcon(ImageLoader.createImageIcon("btnEmprestarLivro50x50.png"));
		jbDevolucoes.setIcon(ImageLoader.createImageIcon("btnDevolverLivro50x50.png"));
	}
	
	public void mudarTela (JPanel panelAExibir){
		
		if (panelEmVisualizacao != null){
			contentPane.remove(panelEmVisualizacao);			
		}
		
		panelEmVisualizacao = panelAExibir;
		contentPane.add(panelEmVisualizacao,BorderLayout.CENTER);
		contentPane.updateUI();		
	}
	
	private MainUI instanciaMenu (){
		return this;
	}

}
